// 指针数组 & 二级指针

#include <stdio.h>

int b[3][5] = {
    1,2,3,4,5,
    6,7,8,9,10,
    11,12,13,14,15
};


//指针数组
int pointer_array()
{
    int i, j;
    int (*p)[5]; //指针数组
    p = b; //指针数组访问二维数组
    for(int i = 0; i < 3; i++){
        for(int j = 0; j < 5; j++){
            printf("%d", p[i][j]);
        }
        puts("");
    }
    return 0;
}

//二级指针
int pointer_pointer()
{
    int i, j;
    int (*p)[5]; //指针数组
    p = b; // p = &b[0];

    int (**pp)[5]; //二级指针
    pp = &p; //二级指针访问二维数组

    for(int i = 0; i < 3; i++){
        for(int j = 0; j < 5; j++){
            printf("%d", (*pp)[i][j]);
        }
        puts("");
    }
    return 0;
}

//一级指针
int pointer()
{
    int i, j;
    int *pt = b[0];  //一级指针访问二维数组

    for(int i = 0; i < 3; i++){
        for(int j = 0; j < 5; j++){
            printf("%d", *(pt+i*5+j));
        }
        puts("");
    }
    return 0;
}

int main()
{
    pointer_array();
    pointer_pointer();
    pointer();
    return 0;
}
